extends Resource
class_name  Ability

#region Tags相关
@export_group("Tags","tags_")

## 学习此技能要求具备的tags
@export var tags_learn_required:Array[String] = []

## 技能激活时将会添加到 ASC 的 tags
@export var tags_activation:Array[String] = []

## 技能激活时将会从 ASC 移除的 tags
@export var tags_to_remove_on_activation:Array[String] = []

## ASC具备这些tag时，ability将被阻止执行
@export var tags_block:Array[String] = []

## 执行此技能要求具备的tags
@export var tags_activation_required:Array[String] = []



#endregion

## 技能名称
@export var ability_name:String 
## 技能的最大等级
@export var max_level:int = 6
@export var current_level:int = 1

## 该技能的冷却成长曲线
@export var cooldown_grow_curve:Curve
var cooldown:float:
	get:
		if current_level == 0:
			return 0.0
		return cooldown_grow_curve.sample(float(current_level-1)/(max_level-1))
## 资源消耗
@export var cost:Effect

#一个 [EffectsContainer] 完成一部分事件，其中的每一个 [Effect] 将改变一个 [Attribute] 值?
@export var do:Array[Effect]

## 执行者
var executor:AbilitySystemComponent
## 被执行者（目标）
var targets:Array
## 该技能是否能被激活
var can_be_activate:bool:
	get():
		return executor.apply_cost(cost)


signal activated(ability:Ability)

func activate():
	activated.emit(self)


func CommitAbility():
	pass

func CancelAbility():
	pass

signal ended
func EndAbility():
	# 执行冷却逻辑
	ended.emit()


# 将effect应用于自身
func apply_effects_to_owner(effects):
	# 只要有executor,则必然作用于executor
	for effect in effects:
		executor.apply_effect(effect)

# 升级
func level_up():
	if current_level == max_level:
		return
	current_level += 1
